Systems Manager セッションマネージャーを使って Windows 11 からプライベートサブネットの EC2(RHEL9)に WinSCP でファイル送信してみた
コーヒーが好きな emi です。
Systems Manager セッションマネージャーを使って Windows 11 からプライベートサブネットの EC2(RHEL9)に WinSCP でファイル送信・ダウンロードする検証をおこないました。
手順を共有します。
構成図
以下のような構成で、手元の Windows 11 端末からは Systems Manager セッションマネージャーでプライベートサブネットの EC2 インスタンス(RHEL9)には接続できる状態から始めます。
RedHat Enterprise Linux の AMI にはデフォルトで SSM Agent がインストールされていないため、別途インストールする必要があることに注意してください。詳細は以下ブログもご参照ください。
手元の Windows 11 には以下の準備をおこないます。
- AWS CLI のインストール
- IAM ユーザーのクレデンシャルをプロファイルとして設定
- AWS CLI 用の Session Manager プラグインをインストール
- WinSCP をインストール
キーペアを作成し、EC2 インスタンス(今回は RHEL9)に公開鍵の文字列を登録します。
それでは設定していきましょう。
AWS CLI インストール
手元の Windows 11 端末に AWS CLI をインストールし、IAM ユーザーのクレデンシャルをプロファイルとして設定します。
以下のブログに詳細を記載しましたので、実施ください。
AWS CLI 用の Session Manager プラグインをインストールする
以下のドキュメントを参考に、手元の Windows 11 端末に Session Manager プラグインをインストールします。
次の URL をクリックすると、すぐにインストーラーがダウンロードされます。
ダウンロードした「SessionManagerPluginSetup.exe」をダブルクリックするとインストールウィザードが始まります。
「agree to the license terms and conditions」にチェックして「Install」をクリックします。
インストールできたら「close」をクリックしてウィザードを閉じます。
WinSCP のインストール
以下の WinSCP 公式ドキュメントを参考に、手元の Windows 11 端末に WinSCP をインストールします。
以下の WinSCP のダウンロードページからインストーラーをダウンロードします。
https://winscp.net/eng/download.php
ダウンロードした「WinSCP-6.1.2-Setup.exe」をダブルクリックするとインストールウィザードが始まります。
インストールモードは「すべてのユーザー用にインストール」を選択しました。
使用許諾契約書の同意で「許諾」をクリックして進みます。
セットアップ形式では「標準的なインストール」をチェックして「次へ」をクリックします。
ユーザの初期設定では「エクスプローラー」を選択してみました。
Installation を見ると、「Total Commander、Altap Salamander、Norton Commander などのファイルマネージャーを使用したことがある場合はデフォルトのコマンダーインターフェイスを選ぶといいですよ、それ以外の場合はエクスプローラーインターフェイスの方が馴染みがありますよ(意訳)」と記載されていたためです。
Then you will be prompted for Initial User Settings. This allows you to select user interface style. If you have used (and enjoyed) file managers like Total Commander, Altap Salamander or Norton Commander before, keep default Commander interface. Otherwise you will probably be more familiar with Explorer interface.
「インストール」をクリックします。
インストールが完了したら「完了」をクリックしてウィザードを閉じます。
キーペアの作成と設定
キーペアを作成せずに EC2(RHEL9)を起動したので、キーペアを作成して EC2 に設定します。
キーペアの作成
AWS マネジメントコンソールで EC2 コンソールに遷移し、ナビゲーションペインで「キーペア」を選択して「キーペアの作成」からキーペアを作成します。
以下の項目を設定してください。
- 名前
- 任意の名前。今回は「sftp-test-tokyo」としました。
- キーペアのタイプ
- デフォルトのまま RSA で OK です。
- プライベートキーファイル形式
- WinSCP は
.ppk
形式のキーペアが必要なので、.ppk を選択してください。
- WinSCP は
最後に「キーペアを作成」をクリックしてキーペアを作成します。
キーペアがダウンロードされます。このタイミングでしかキーペアはダウンロードできないので、大事に保管してください。
なお、RHEL 9.0 では SHA-1 が非推奨になったことにより、キーペアのタイプが「RSA」だと鍵認証に失敗することがある模様です。
本検証ではキーペアのタイプ「RSA」ででうまく行きましたが、うまくいかない場合はキーペアのタイプを「ED25519」にして試してみてください。
- 参考
キーペアの公開鍵の文字列を取得
キーペアの公開鍵を取得します。
PuTTy などの 3rd Party 製品を使う方法もありますが、AWS CLI で公開鍵を表示できるので、CloudShell で公開鍵の文字列を取得しましょう。
以下のドキュメントで、AWS CLI を利用して公開鍵の文字列を取得するコマンドを確認します。
公開鍵の文字列を取得するコマンド構文
aws ec2 describe-key-pairs --key-names key-pair-name --include-public-key
key-pair-name
にはキーペアの名前をいれます。今回キーペアの名前は「sftp-test-tokyo」としましたので、実行コマンドは以下になります。
aws ec2 describe-key-pairs --key-names sftp-test-tokyo --include-public-key
CloudShell を開き、コマンドを実行します。
- 実行結果
[cloudshell-user@ip-10-2-15-4 ~]$ aws ec2 describe-key-pairs --key-names sftp-test-tokyo --include-public-key { "KeyPairs": [ { "KeyPairId": "key-0452d5ed13437cd64", "KeyFingerprint": "xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx", "KeyName": "sftp-test-tokyo", "KeyType": "rsa", "Tags": [], "PublicKey": "ssh-rsa AAAAxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxSZV7 sftp-test-tokyo", "CreateTime": "2023-10-31T02:01:28.788000+00:00" } ] } [cloudshell-user@ip-10-2-15-4 ~]$
"PublicKey"
の後ろが公開鍵の文字列です。ssh-rsa AAAAxxx~xxxSZV7 sftp-test-tokyo
の部分をコピーしておいてください。
セッションマネージャーで EC2(RHEL9)に接続し、公開鍵の文字列を登録
セッションマネージャーで EC2(RHEL9)に接続し、公開鍵の文字列を登録します。
セッションマネージャーで EC2(RHEL9)に接続してください。
ec2-user に切り替えます。
実行コマンド
sudo su - ec2-user
- 実行結果
sh-5.1$ sudo su - ec2-user [ec2-user@ip-10-1-10-94 ~]$
ls -la
コマンドで、ec2-user のホームディレクトリに .ssh
があるか確認します。
- 実行結果
[ec2-user@ip-10-1-10-94 ~]$ ls -la total 12 drwx------. 3 ec2-user ec2-user 74 Oct 31 00:36 . drwxr-xr-x. 4 root root 38 Oct 31 02:21 .. -rw-r--r--. 1 ec2-user ec2-user 18 Nov 24 2022 .bash_logout -rw-r--r--. 1 ec2-user ec2-user 141 Nov 24 2022 .bash_profile -rw-r--r--. 1 ec2-user ec2-user 492 Nov 24 2022 .bashrc drwx------. 2 ec2-user ec2-user 29 Oct 31 00:36 .ssh [ec2-user@ip-10-1-10-94 ~]$
.ssh
がありました。
続いて ls -la .ssh/
コマンドで、authorized_keys
ファイルがあるか確認します。
- 実行結果
[ec2-user@ip-10-1-10-94 ~]$ ls -la .ssh/ total 0 drwx------. 2 ec2-user ec2-user 29 Oct 31 00:36 . drwx------. 3 ec2-user ec2-user 74 Oct 31 00:36 .. -rw-------. 1 ec2-user ec2-user 0 Oct 31 00:36 authorized_keys [ec2-user@ip-10-1-10-94 ~]$
authorized_keys
ファイルがありました。
vi .ssh/authorized_keys
で編集します。
- 実行結果
[ec2-user@ip-10-1-10-94 ~]$ vi .ssh/authorized_keys
vi
コマンドを実行すると vi エディタが開きます。i
キーを押下して編集モードに遷移します。
先ほどコピーしておいた公開鍵の文字列を貼り付けます。
esc
キーを押下して編集モードを抜けたら、:wq
を入力し Enter
キーを押下して保存します。
authorized_keys
ファイルの中身が正しく編集できたか cat
コマンドで確認します。
実行コマンド
cat .ssh/authorized_keys
- 実行結果
[ec2-user@ip-10-1-10-94 ~]$ cat .ssh/authorized_keys ssh-rsa AAAAxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxSZV7 sftp-test-tokyo [ec2-user@ip-10-1-10-94 ~]$
authorized_keys
ファイルに公開鍵の文字列が保存できたことが確認できました。
これで EC2 インスタンスにキーペアの公開鍵の文字列を登録できました。
もし authorized_keys
ファイルの編集権限がない場合は chmod 600 .ssh/authorized_keys
などで書き込み権限を付与してください。
WinSCP の設定
以下の WinSCP ドキュメントを参考に、WinSCP の設定をおこないます。
Connecting securely to Amazon EC2 server with SFTP::WinSCP
WinSCP を開き、以下のように入力します。
- 転送プロトコル:SFTP
- ホスト名:EC2(RHEL9)のインスタンス ID
- ポート番号:22
- ユーザー名:ec2-user
入力したら、「設定」をクリックします。
「高度なサイトの設定」画面が開きます。
[接続] - [プロキシ] で以下のように入力します。
- プロキシ形式:ローカル
- ローカルプロキシコマンド
aws ssm start-session --target %host --document-name AWS-StartSSHSession --parameters "portNumber=%port" --profile <aws profile> --region <region>
ローカルプロキシコマンドは、セッションを張るためのコマンドです。<aws profile>
には、AWS CLI を設定したときのプロファイルをいれてください。私は今回 default
プロファイルを使用します。リージョンは任意で入力してください。
私は以下のローカルプロキシコマンドを入力しました。
aws ssm start-session --target %host --document-name AWS-StartSSHSession --parameters "portNumber=%port" --profile "default"
[SSH] - [認証] で、ダウンロードしたキーペア秘密鍵の場所を入力します。
入力できたら「OK」をクリックします。
「ログイン」をクリックします。
初めて接続する際は、以下のように警告が出ます。このまま「はい」で進めます。
WinSCP から EC2(RHEL9)に接続できました。
ファイルを転送
手元の Windows 11 端末のエクスプローラーから、WinSCP にテストファイルをドラッグ&ドロップします。
確認画面が出ます。「OK」をクリックします。
テストファイルを EC2 上にアップロードできました。
セッションマネージャーからもファイルの一覧を見てみると、ちゃんと「test.txt」が追加されたことが確認できます。
[ec2-user@ip-10-1-10-94 ~]$ ls -la total 12 drwx------. 3 ec2-user ec2-user 90 Oct 31 02:40 . drwxr-xr-x. 4 root root 38 Oct 31 02:21 .. -rw-r--r--. 1 ec2-user ec2-user 18 Nov 24 2022 .bash_logout -rw-r--r--. 1 ec2-user ec2-user 141 Nov 24 2022 .bash_profile -rw-r--r--. 1 ec2-user ec2-user 492 Nov 24 2022 .bashrc drwx------. 2 ec2-user ec2-user 29 Oct 31 02:29 .ssh -rw-r--r--. 1 ec2-user ec2-user 0 Aug 12 13:32 test.txt [ec2-user@ip-10-1-10-94 ~]$
ファイルを EC2 上で作成
WinSCP でファイルを作成してみます。
空白部分で右クリックし、[新規] - [ファイル] をクリックします。
任意のファイル名を入力し、「OK」をクリックします。
ファイルの中身を編集できます。
左上の上書き保存のアイコンで上書き保存し、右上の×をクリックして作成したファイルを閉じます。
WinSCP 上で作成したファイルが表示されているのが分かります。
セッションマネージャーからもファイルの一覧を見てみると、ちゃんと「test_EC2_file.txt」が追加されたことが確認できます。
[ec2-user@ip-10-1-10-94 ~]$ ls -la total 16 drwx------. 3 ec2-user ec2-user 115 Oct 31 02:42 . drwxr-xr-x. 4 root root 38 Oct 31 02:21 .. -rw-r--r--. 1 ec2-user ec2-user 18 Nov 24 2022 .bash_logout -rw-r--r--. 1 ec2-user ec2-user 141 Nov 24 2022 .bash_profile -rw-r--r--. 1 ec2-user ec2-user 492 Nov 24 2022 .bashrc drwx------. 2 ec2-user ec2-user 29 Oct 31 02:29 .ssh -rw-r--r--. 1 ec2-user ec2-user 30 Oct 31 02:42 test_EC2_file.txt -rw-r--r--. 1 ec2-user ec2-user 0 Aug 12 13:32 test.txt [ec2-user@ip-10-1-10-94 ~]$
ファイルをダウンロード
WinSCP 上で見えている EC2(RHEL9)上のファイルを、ドラッグ&ドロップで手元の Windows 11 端末にコピーすることもできます。
手元の Windows 11 端末でコピーしたファイルを開けました。